package com.tedu;

import org.jsoup.select.Elements;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Selectable;

import java.util.List;

/**
 * 页面解析的  爬虫框架的组件
 */
public class PageProcessorImpl  implements PageProcessor {

    //爬虫的基本配置  site 类
    //设置重试次数；超时时间；请求间隔时间
    private Site site = Site.me().setRetryTimes(2).setTimeOut(5000).setSleepTime(1000);

    /**
     * 页面数据解析
     * 1. 有效数据----保存---page.PUTFILE  调用数据持久化  保存
     * 2. 有效url  添加爬虫队列，继续爬取；
     * @param page
     */
    public void process(Page page) {
//        System.out.println(page.getHtml());
        //解析  数据
        //使用  正则表达式  解析  得到全部url
        Selectable links = page.getHtml().links();
        //解析  http://www.
        List<String> all = links.regex("http://www.+\\w+").all();
//        System.out.println(all);
        //解析  url后，添加  爬虫url队列中，继续爬出
        page.addTargetRequests(all);// 爬虫会自动爬取内容  程序一直运行

        //依据需求解析  内容   获取网页标题；；
        Elements title = page.getHtml().getDocument().getElementsByTag("title");
//        System.out.println(title.text());

        //发送到PipelineImpl  类  保存数据库
        page.putField("title",title.text());


    }

    /**
     * 返回爬虫 site对象  在爬取数据，会使用。
     * @return
     */
    public Site getSite() {
        return site;
    }
}
